Modelo de Regresión

library(tidyverse)
library(readxl)
library(tsibble)
library(feasts)
library(fable)
datos_tbl <- read_xlsx("tiempos_respuesta.xlsx")
New names:
* `Tiempo l攼㹤mite restante` -> `Tiempo l攼㹤mite restante...24`
* `Tiempo l攼㹤mite restante` -> `Tiempo l攼㹤mite restante...27`
#glimpse(datos)

datos_tbl <- datos_tbl %>% 
  mutate(across(contains("Tiempo"), as.numeric)) %>% 
  rename_all(funs(make.names(.))) %>% 
  rename(Orden = N...de.orden,
         Serie = N...de.serie,
         Equipo = N...de.equipo,
         Num.Cliente = N..de.cliente,
         Distribuidor = Grupo.empresarial,
         Nivel = Nivel.de.servicio,
         Recepcion = `Fecha.recepción`,
         Ejecutivo = Usuario.captura,
         IS.asignado = `Técnico.asignado`,
         IS.visita = `Técnico.de.visita`,
         Visitas = N...de.visitas,
         Cierre = Fecha.cierre,
         TST = Tiempo.transcurrido,
         TMO = Tiempo.efectivo.en.sitio,
         TR = Tiempo.de.respuesta,
         TLR = Limite.de.tiempo.de.respuesta,
         TLR.restante = `Tiempo.límite.restante...24`,
         TSP = Tiempo.efectivo,
         TLS = `Limite.tiempo.de.solución.total`,
         TLS.restante = `Tiempo.límite.restante...27`) %>% 
  mutate(Recepcion = as.Date(Recepcion),
         Cierre    = as.Date(Cierre)) %>% 
  filter(Recepcion >= "2018-02-01")

datos_tbl

El modelo de regresión lineal nos permite crear una relación entre 2 variables:

  • La variable de previsión \(y\) o dependiente:
  • La variable predictora \(x\) o regresora:

Por lo tanto, a partir de esto es como vamos a realizar pronósticos.

datos_tbl %>% ggplot(aes(x = TR, y = TSP)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE)

datos_tsbl <- datos_tbl %>% 
  filter(IS.visita != "Consultoria Dual",
         Estatus   == "RESUELTA",
         Categoría == "CORRECTIVO") %>% 
  group_by(Recepcion, Ruta) %>% 
  summarise(across(.cols = c(TR, TSP, TMO, TST), mean),
            .groups = "drop") %>% 
  pivot_longer(
    cols      = starts_with("T"),
    names_to  = "SLA", 
    values_to = "Tiempos"
  ) %>% 
  as_tsibble(
    # index : la variable temporal
    index = Recepcion,
    # key : la(s) variable(s) que identifican a cada serie de tiempo
    key   = c(Ruta, SLA) 
  )

datos_tsbl
datos_week_tsbl <- datos_tsbl %>% 
  group_by_key() %>% 
  index_by(Semana = yearweek(Recepcion)) %>% 
  summarise(Tiempos = mean(Tiempos), .groups = "drop")
datos_week_tsbl
datos_month_tsbl <- datos_tsbl %>% 
  group_by_key() %>% 
  index_by(Mes = yearmonth(Recepcion)) %>% 
  summarise(Tiempos = mean(Tiempos), .groups = "drop")
datos_month_tsbl
p <- datos_tsbl %>% 
  filter(Ruta == "JALISCO") %>% 
  autoplot(Tiempos) + #aes(color = Ruta) +
  facet_wrap(~ SLA, scales = "free_y") +
  theme(legend.position = "none")

plotly::ggplotly(p)

p <- datos_week_tsbl %>% 
  filter(Ruta == "JALISCO") %>% 
  autoplot(Tiempos) + #aes(color = Ruta) +
  facet_wrap(~ SLA, scales = "free_y") +
  theme(legend.position = "none")

plotly::ggplotly(p)

p <- datos_month_tsbl %>% 
  filter(Ruta == "JALISCO") %>% 
  autoplot(Tiempos) + #aes(color = Ruta) +
  facet_wrap(~ SLA, scales = "free_y") +
  theme(legend.position = "none")

plotly::ggplotly(p)
datos_week_tsbl %>% 
  filter(Ruta == "JALISCO") %>% 
  model(ETS(Tiempos),
        ARIMA(Tiempos)) %>% 
  forecast(h = "1 year") %>% 
  autoplot(datos_week_tsbl, level = NULL)+
  facet_wrap(~SLA, scales = "free_y")
Seasonal periods (`period`) of length greather than 24 are not supported by ETS. Seasonality will be ignored.Seasonal periods (`period`) of length greather than 24 are not supported by ETS. Seasonality will be ignored.Seasonal periods (`period`) of length greather than 24 are not supported by ETS. Seasonality will be ignored.Seasonal periods (`period`) of length greather than 24 are not supported by ETS. Seasonality will be ignored.Seasonal periods (`period`) of length greather than 24 are not supported by ETS. Seasonality will be ignored.Seasonal periods (`period`) of length greather than 24 are not supported by ETS. Seasonality will be ignored.Seasonal periods (`period`) of length greather than 24 are not supported by ETS. Seasonality will be ignored.Seasonal periods (`period`) of length greather than 24 are not supported by ETS. Seasonality will be ignored.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIE1vZGVsbyBkZSBSZWdyZXNpw7NuDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkodHNpYmJsZSkNCmxpYnJhcnkoZmVhc3RzKQ0KbGlicmFyeShmYWJsZSkNCmBgYA0KDQpgYGB7cn0NCmRhdG9zX3RibCA8LSByZWFkX3hsc3goInRpZW1wb3NfcmVzcHVlc3RhLnhsc3giKQ0KDQojZ2xpbXBzZShkYXRvcykNCg0KZGF0b3NfdGJsIDwtIGRhdG9zX3RibCAlPiUgDQogIG11dGF0ZShhY3Jvc3MoY29udGFpbnMoIlRpZW1wbyIpLCBhcy5udW1lcmljKSkgJT4lIA0KICByZW5hbWVfYWxsKGZ1bnMobWFrZS5uYW1lcyguKSkpICU+JSANCiAgcmVuYW1lKE9yZGVuID0gTi4uLmRlLm9yZGVuLA0KICAgICAgICAgU2VyaWUgPSBOLi4uZGUuc2VyaWUsDQogICAgICAgICBFcXVpcG8gPSBOLi4uZGUuZXF1aXBvLA0KICAgICAgICAgTnVtLkNsaWVudGUgPSBOLi5kZS5jbGllbnRlLA0KICAgICAgICAgRGlzdHJpYnVpZG9yID0gR3J1cG8uZW1wcmVzYXJpYWwsDQogICAgICAgICBOaXZlbCA9IE5pdmVsLmRlLnNlcnZpY2lvLA0KICAgICAgICAgUmVjZXBjaW9uID0gYEZlY2hhLnJlY2VwY2nDs25gLA0KICAgICAgICAgRWplY3V0aXZvID0gVXN1YXJpby5jYXB0dXJhLA0KICAgICAgICAgSVMuYXNpZ25hZG8gPSBgVMOpY25pY28uYXNpZ25hZG9gLA0KICAgICAgICAgSVMudmlzaXRhID0gYFTDqWNuaWNvLmRlLnZpc2l0YWAsDQogICAgICAgICBWaXNpdGFzID0gTi4uLmRlLnZpc2l0YXMsDQogICAgICAgICBDaWVycmUgPSBGZWNoYS5jaWVycmUsDQogICAgICAgICBUU1QgPSBUaWVtcG8udHJhbnNjdXJyaWRvLA0KICAgICAgICAgVE1PID0gVGllbXBvLmVmZWN0aXZvLmVuLnNpdGlvLA0KICAgICAgICAgVFIgPSBUaWVtcG8uZGUucmVzcHVlc3RhLA0KICAgICAgICAgVExSID0gTGltaXRlLmRlLnRpZW1wby5kZS5yZXNwdWVzdGEsDQogICAgICAgICBUTFIucmVzdGFudGUgPSBgVGllbXBvLmzDrW1pdGUucmVzdGFudGUuLi4yNGAsDQogICAgICAgICBUU1AgPSBUaWVtcG8uZWZlY3Rpdm8sDQogICAgICAgICBUTFMgPSBgTGltaXRlLnRpZW1wby5kZS5zb2x1Y2nDs24udG90YWxgLA0KICAgICAgICAgVExTLnJlc3RhbnRlID0gYFRpZW1wby5sw61taXRlLnJlc3RhbnRlLi4uMjdgKSAlPiUgDQogIG11dGF0ZShSZWNlcGNpb24gPSBhcy5EYXRlKFJlY2VwY2lvbiksDQogICAgICAgICBDaWVycmUgICAgPSBhcy5EYXRlKENpZXJyZSkpICU+JSANCiAgZmlsdGVyKFJlY2VwY2lvbiA+PSAiMjAxOC0wMi0wMSIpDQoNCmRhdG9zX3RibA0KYGBgDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpFbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgbm9zIHBlcm1pdGUgY3JlYXIgdW5hIHJlbGFjacOzbiBlbnRyZSAyIHZhcmlhYmxlczoNCg0KLSBMYSB2YXJpYWJsZSBkZSBwcmV2aXNpw7NuICR5JCBvIGRlcGVuZGllbnRlOg0KLSBMYSB2YXJpYWJsZSBwcmVkaWN0b3JhICR4JCBvIHJlZ3Jlc29yYTogDQoNClBvciBsbyB0YW50bywgYSBwYXJ0aXIgZGUgZXN0byBlcyBjb21vIHZhbW9zIGEgcmVhbGl6YXIgcHJvbsOzc3RpY29zLg0KDQpgYGB7cn0NCmRhdG9zX3RibCAlPiUgZ2dwbG90KGFlcyh4ID0gVFIsIHkgPSBUU1ApKSArDQogIGdlb21fcG9pbnQoKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UpDQpgYGANCg0KDQpgYGB7cn0NCmRhdG9zX3RzYmwgPC0gZGF0b3NfdGJsICU+JSANCiAgZmlsdGVyKElTLnZpc2l0YSAhPSAiQ29uc3VsdG9yaWEgRHVhbCIsDQogICAgICAgICBFc3RhdHVzICAgPT0gIlJFU1VFTFRBIiwNCiAgICAgICAgIENhdGVnb3LDrWEgPT0gIkNPUlJFQ1RJVk8iKSAlPiUgDQogIGdyb3VwX2J5KFJlY2VwY2lvbiwgUnV0YSkgJT4lIA0KICBzdW1tYXJpc2UoYWNyb3NzKC5jb2xzID0gYyhUUiwgVFNQLCBUTU8sIFRTVCksIG1lYW4pLA0KICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIikgJT4lIA0KICBwaXZvdF9sb25nZXIoDQogICAgY29scyAgICAgID0gc3RhcnRzX3dpdGgoIlQiKSwNCiAgICBuYW1lc190byAgPSAiU0xBIiwgDQogICAgdmFsdWVzX3RvID0gIlRpZW1wb3MiDQogICkgJT4lIA0KICBhc190c2liYmxlKA0KICAgICMgaW5kZXggOiBsYSB2YXJpYWJsZSB0ZW1wb3JhbA0KICAgIGluZGV4ID0gUmVjZXBjaW9uLA0KICAgICMga2V5IDogbGEocykgdmFyaWFibGUocykgcXVlIGlkZW50aWZpY2FuIGEgY2FkYSBzZXJpZSBkZSB0aWVtcG8NCiAgICBrZXkgICA9IGMoUnV0YSwgU0xBKSANCiAgKQ0KDQpkYXRvc190c2JsDQpgYGANCmBgYHtyfQ0KZGF0b3Nfd2Vla190c2JsIDwtIGRhdG9zX3RzYmwgJT4lIA0KICBncm91cF9ieV9rZXkoKSAlPiUgDQogIGluZGV4X2J5KFNlbWFuYSA9IHllYXJ3ZWVrKFJlY2VwY2lvbikpICU+JSANCiAgc3VtbWFyaXNlKFRpZW1wb3MgPSBtZWFuKFRpZW1wb3MpLCAuZ3JvdXBzID0gImRyb3AiKQ0KZGF0b3Nfd2Vla190c2JsDQpgYGANCg0KYGBge3J9DQpkYXRvc19tb250aF90c2JsIDwtIGRhdG9zX3RzYmwgJT4lIA0KICBncm91cF9ieV9rZXkoKSAlPiUgDQogIGluZGV4X2J5KE1lcyA9IHllYXJtb250aChSZWNlcGNpb24pKSAlPiUgDQogIHN1bW1hcmlzZShUaWVtcG9zID0gbWVhbihUaWVtcG9zKSwgLmdyb3VwcyA9ICJkcm9wIikNCmRhdG9zX21vbnRoX3RzYmwNCmBgYA0KDQoNCmBgYHtyfQ0KcCA8LSBkYXRvc190c2JsICU+JSANCiAgZmlsdGVyKFJ1dGEgPT0gIkpBTElTQ08iKSAlPiUgDQogIGF1dG9wbG90KFRpZW1wb3MpICsgI2Flcyhjb2xvciA9IFJ1dGEpICsNCiAgZmFjZXRfd3JhcCh+IFNMQSwgc2NhbGVzID0gImZyZWVfeSIpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KDQpwbG90bHk6OmdncGxvdGx5KHApDQoNCnAgPC0gZGF0b3Nfd2Vla190c2JsICU+JSANCiAgZmlsdGVyKFJ1dGEgPT0gIkpBTElTQ08iKSAlPiUgDQogIGF1dG9wbG90KFRpZW1wb3MpICsgI2Flcyhjb2xvciA9IFJ1dGEpICsNCiAgZmFjZXRfd3JhcCh+IFNMQSwgc2NhbGVzID0gImZyZWVfeSIpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KDQpwbG90bHk6OmdncGxvdGx5KHApDQoNCnAgPC0gZGF0b3NfbW9udGhfdHNibCAlPiUgDQogIGZpbHRlcihSdXRhID09ICJKQUxJU0NPIikgJT4lIA0KICBhdXRvcGxvdChUaWVtcG9zKSArICNhZXMoY29sb3IgPSBSdXRhKSArDQogIGZhY2V0X3dyYXAofiBTTEEsIHNjYWxlcyA9ICJmcmVlX3kiKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCg0KcGxvdGx5OjpnZ3Bsb3RseShwKQ0KYGBgDQoNCmBgYHtyfQ0KZGF0b3Nfd2Vla190c2JsICU+JSANCiAgZmlsdGVyKFJ1dGEgPT0gIkpBTElTQ08iKSAlPiUgDQogIG1vZGVsKEVUUyhUaWVtcG9zKSwNCiAgICAgICAgQVJJTUEoVGllbXBvcykpICU+JSANCiAgZm9yZWNhc3QoaCA9ICIxIHllYXIiKSAlPiUgDQogIGF1dG9wbG90KGRhdG9zX3dlZWtfdHNibCwgbGV2ZWwgPSBOVUxMKSsNCiAgZmFjZXRfd3JhcCh+U0xBLCBzY2FsZXMgPSAiZnJlZV95IikNCmBgYA0KDQo=